iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

Rails 手工打造自己的部落格 系列 第 10

Rails 手工打造自己的部落格 10 - CRUD 之 Model 篇

  • 分享至 

  • xImage
  •  

今天我們就可以來實作所謂的CRUD!
中文叫做 「增刪查改」
其實滿好理解的,都是很口語化的單字。
C = Create-(新增)
R = Read---(查看)
U = Update(修改)
D = Delete-(刪除)
至於為什麼不是叫增查改刪呢?下一期我在專門做影片給大家講解(X
好啦,好像目前原因也沒有什麼統一的說法,就當是因為唸得順口吧!(攤手

而我們在網站上,要直接對資料庫進行動作都離不開這四個動詞。
例如: 寫文章、註冊用戶、付款、購票、甚至遊戲..等。
好了 我們廢話不多說來實際寫吧!!

從昨天的路徑開始!
來到config/routes.rb
原本 Rails 就會在裡面放註解,

註解的意思就是標註,
主要目的是為了讓開發人員可以添加描述、說明代碼、提供上下文,或者將臨時代碼標記為不使用,
而這些訊息不會被程式執行或渲染。
每種語言的註解符號也不一樣
#ruby的註解是放"#",<%# 這是 ERB 中的單行註解 %> ,
//這是Javascript的註解, <!-- 這是 HTML 中的註解-->
其中我們可以把 root 的註解拿掉,這樣我們就有一個文章(articles)列表(index)的頁面當作主頁了!

root "articles#index"
# 接著再寫
resources :articles

通常 resources 的命名都會是小寫複數,
對於Rails 也有一些命名的慣例需要記

Controller: articles 小寫複數(跟routes一樣) ,
但是長出來之後會是大寫複數,因為是用駝峰式寫法
Modle: Article 大寫單數
View: article.html.erb 小寫單數

我們有了路徑之後,可以先從 Model 下手
先分析一下我們需要的資料結構,就是需要那些欄位
如果是文章的話,大概就只有

string :title # 字串 標題
text :content # 文字區域 內容

前面的 string 跟 text 就會是欄位的型別
後面則是欄位的名子,所以開欄位的時候連型別也要設計好
那我們就可以下rails的指令

#如果型別是 string 的就可以不用寫在指令裡面,預設就會是string
rails g model Article title content:text

我們就創好一個 Article 的資料表了,
而 rails 會幫你長出這些東西

      invoke  active_record
      create    db/migrate/20230925165002_create_articles.rb
      create    app/models/article.rb
      invoke    test_unit
      create      test/models/article_test.rb
      create      test/fixtures/articles.yml

前兩個是跟資料表active_record有關,後兩個跟測試test_unit有關。

資料結構

我們來看第一個檔案 db/migrate/20230925165002_create_articles.rb
(在編輯器中開啟檔案 (ctrl + 按一下))
第一個檔案就是我們生成這個model的時候的設定檔案,我們叫他 migration(資料遷移)檔
這時我們會生成一個還沒有確定設立的遷移檔案
每個 Migration 檔案描述了一個特定時間點上對資料庫結構所做的變更,
例如這個就是create創造,還可能會有修改、刪除。

class CreateArticles < ActiveRecord::Migration[7.0]
  def change
    create_table :articles do |t|
      t.string :title
      t.text :content

      t.timestamps
    end
  end
end

最酷的是,每個model生成的時候,都會一起產生 t.timestamps
t.timestamps 意思就是,他會紀錄 "建立時間" 和 "更新時間"
到時候在schema可以看到。

然而這個資料結構,目前還不算是確定的版本,這就好像在寫運行的腳本一樣,
我們只有把腳本寫好而已,還沒實際運行,實際運行的話我們要輸入指令

$ rails db:migrate

這個指令,會執行全部的migration檔案,然後把最終結果寫在schema(資料庫綱要)裡面
這個指令非常重要,在團隊開發的時候,拉取隊友做好的東西的時候,
都需要確認是不是所有的遷移檔都有運行過了,不然在schema就會有衝突。

schema

db/schema.rb
資料庫綱要,
這裡記錄了所有資料表的資料結構,
又稱作"元資料"就是指"紀錄資料的資料"

ActiveRecord::Schema[7.0].define(version: 2023_09_25_165002) do
  create_table "articles", force: :cascade do |t|
    t.string "title"
    t.text "content"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end
end

這裡寫的就是最終的版本了

我們可以來看第二個檔案了

Model

app/models/article.rb

class Article < ApplicationRecord 
end

"<"是代表 Article 這個class(類別) 繼承 自 ApplicationRecord 的 Ruby 類別 (class)。
這種寫法是 ActiveRecord 的慣例,用來定義一個與資料庫表格對應的模型 (Model)。

  1. Class 名稱:
    Article 是這個模型的名稱,通常與資料庫表格名稱對應(在這種情況下,可能對應到 "articles" 表格)。
  2. 繼承 ApplicationRecord:
    Article 類別繼承自 ApplicationRecord,這表示 Article 是 ApplicationRecord 的子類別,並且會繼承 ApplicationRecord 中的方法和屬性。
    這個 Article 類別通常用於表示和操作資料庫中的 "articles" 表格的資料。
    每個模型類別代表一個資料表,並且提供了方法來操作該資料表的資料。
    這讓你可以在 Article 模型中定義與該資料表相關的邏輯、方法、以及欄位關聯等

上一篇
Rails 手工打造自己的部落格 09 - Git init
下一篇
Rails 手工打造自己的部落格 11 -CRUD 02
系列文
Rails 手工打造自己的部落格 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言